package com.hqyj.websocket;


import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description 消息提示服务
 * @Autor 伍军
 * @Date 2022/11/3 11:41
 * @Version 1.0
 **/
@Component
@ServerEndpoint(value = "/kickServer/{name}")//定义访问服务的地址
public class KickUserServiceWebSocket {
    //记录所有客户端
    private  static List<Map<String,Session>> list = new ArrayList<>();

   // private static Map<String,Session> map = new HashMap<>();
    /**
     *  @OnOpen:服务开启事件
     * @param session 客户端会话
     */
    @OnOpen
    public void open(Session session, @PathParam("name") String name) throws IOException {
        System.out.println("客户端编号:"+session.getId()+"开启");
        //查询是否是第二次上线的用户
        if(list.size()>0){
            for(Map<String,Session> m:list){
                //判断用户存在否
                 if(m.containsKey(name)){
                     //发送给用户
                     m.get(name).getBasicRemote().sendText("已登录");
                 }
            }
        }
        //添加用户
        Map<String,Session> map = new HashMap<>();
        map.put(name,session);
        list.add(map);

    }

    /**
     *  @OnClose：服务关闭事件
     * @param session 客户端会话
     */
    @OnClose
    public void colse(Session session, @PathParam("name") String name){
        System.out.println("客户端编号:"+session.getId()+"关闭");
      if(list.size()>0){
            //移除客户端
            for(Map<String,Session> m:list){
                //判断移除的客户端是否是当前的客户端
                if(m.get(name).getId().equals(session.getId())){
                    list.remove(m);
                }

            }
        }



    }

    /**
     * @OnMessage:接收客户端发送来的消息触发事件
     * @param s 发送消息的客户端的会话
     * @param msg 消息
     */
    @OnMessage
    public void message(Session s,String msg) throws IOException {
        System.out.println("客户端编号:"+s.getId()+"发送的消息"+msg);
    }

    /**
     * @OnError：客户端连接服务端出现异常触发的事件
     * @param s 异常客户端的会话
     * @param throwable 异常信息
     */
    @OnError
    public void error(Session s,Throwable throwable){
        System.out.println("客户端编号:"+s.getId()+"出现异常"+throwable);
    }

}
